/*-----------------------------------------------File Info------------------------------------------------
** File Name:               AIP5916.h
** Last modified date:      20222620
** Last version:            V0.1
** Description:             
**--------------------------------------------------------------------------------------------------------            
** Created date:            20220620
** author:                  YLY
** Version:                 V0.1
** Descriptions:            键盘扫描处理函数
**--------------------------------------------------------------------------------------------------------
*/

#ifndef _AIP59XX_H_
#define	_AIP59XX_H_

#include "userConfig.h"

#define AIPERR GLOBAL_ERR
#ifndef AIPERR
	#define AIPERR(...)
#endif

//#define AIPDBG GLOBAL_DBG
#ifndef AIPDBG
	#define AIPDBG(...)
#endif

///////////////////////////Register ADDR////////////////////////////////////////////////////////////////////////////
#define   SYSCONADDR			0X3A		// 系统控制寄存器
#define   MCONADDR				0X21		// 工作模式寄存器
#define   KDR0ADDR				0X23		//
#define   KDR1ADDR				0X24		//	触摸按键禁能配置寄存器
#define   K0CONADDR				0X18		//	GPIO输入输出
#define   K1CONADDR				0X19		//	 
#define   GSRADDR			    0X20		//	全局灵敏度配置寄存器	 
#define   BURADDR				0X22		// 基线寄存器
#define   DMR0ADDR				0X2D		// 开发模式寄存器
#define   DMR1ADDR				0X2A		// 
#define   K0_INADDR				0X1C		// 管脚输入状态寄存器
#define   K1_INADDR				0X1D		//	R
#define   K0_OUTADDR			0X1A		// 管脚输出状态寄存器
#define   K1_OUTADDR			0X1B		//
#define   KVR0ADDR				0X34		// 键值寄存器
#define   KVR1ADDR				0X35		//	R

#define   K0R00ADDR				0X00		//	按键阈值控制寄存器
#define   K0R01ADDR				0X01		//
#define   K0R02ADDR				0X02		//
#define   K0R03ADDR				0X03		//
#define   K0R04ADDR				0X04		//
#define   K0R05ADDR				0X05		//
#define   K0R06ADDR				0X06		//
#define   K0R07ADDR				0X07		//
#define   K0R10ADDR				0X08		//
#define   K0R11ADDR				0X09		//
#define   K0R12ADDR				0X0A		//
#define   K0R13ADDR				0X0B		//
#define   K0R14ADDR				0X0C		//
#define   K0R15ADDR				0X0D		//
#define   K0R16ADDR				0X0E		//
#define   K0R17ADDR				0X0F		//


/////////B版本对应地址//////////////////
#define AIP5916_ADDR    		0x57	//0x68     

typedef struct
{
	uint8_t gKorAddr;
	uint8_t gKorVal;	// 阈值越大，按键灵敏度低，4~255
}tsAipCfg;

#define AIP_CFG    {{K0R00ADDR,0x0C},/*距离1 */ \
					{K0R01ADDR,0x0A},/*距离2*/ \
					{K0R02ADDR,0x09},/*距离3*/ \
					{K0R03ADDR,0x07},/*距离4*/ \
					{K0R04ADDR,0x07},/*距离4*/ \
					{K0R05ADDR,0x09},/*距离3*/ \
					{K0R06ADDR,0x0A},/*距离2*/ \
					{K0R07ADDR,0x0C},/*距离1*/ \
					{K0R10ADDR,0x07},/*距离4*/ \
					{K0R11ADDR,0x09},/*距离3*/ \
					{K0R12ADDR,0x0A},/*距离2*/ \
					{K0R13ADDR,0x0C}}/*距离1*/

#define	AIP_KDR0_VAL	0X00	// 0：K00-K07：使能触摸按键		1：禁止触摸通道
#define	AIP_KDR1_VAL	0XF0	// 0：K10-K17：使能触摸按键		1：禁止触摸通道				
				
typedef enum
{
	AIP_IDLE,
	AIP_FAIL,
	AIP_SUCCESS
}teAipFeedback;


/* External varialbles -------------------------------------------------------*/
//AIP59xx必须放第一位初始化(随便什么I2C地址都有ACK)
extern bool aip59xxInit(void);
extern uint8_t readAip59xxValue(uint8_t *pBuf);
extern void checkAipKey(void); 
#endif	//	_AIP59XX_H_








